home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / prg_casm / recio215.zip / HISTORY < prev    next >
Text File  |  1996-10-26  |  13KB  |  287 lines

  1. recio, Version 2.15, Release October 26, 1996.
  2. Copyright (C) 1994-1996, William Pierpoint.
  3.  
  4. HISTORY OF RECIO LIBRARY
  5.  
  6. 10/26/96 - vers. 2.15
  7.  
  8.     Changed copyright to GNU Library General Public License, version 2.
  9.     
  10.     Moved operating system dependencies to recio.h
  11.  
  12.     Added new functions to let you read the fields of a character delimited 
  13.     input record in any order.  These functions are rnbgeti, rnbgetui, 
  14.     rnbgetl, rnbgetul, rngeti, rngetui, rngetl, rngetul, rngetf, rngetd, 
  15.     rngetc, rngets, rngett, and rngettm.  Added rgotofld function that 
  16.     allows you to jump directly to a character delimited field.
  17.     
  18.     Changed rskipnfld and rskipfld functions for void return.  A move 
  19.     will be made to the specified field (same for rgotofld) whether or 
  20.     not the field actually exists (e.g. off the end of record).  If off 
  21.     the end of the record, the error will be reported when the data is 
  22.     read.  Fixed rskipnfld to set rfldno to original rfldno + value of 
  23.     num parameter.
  24.  
  25.     Added error R_ENOGET for any records that are larger in size than 
  26.     size_t.  This could occur if a binary file was opened instead of 
  27.     a text file.
  28.     
  29.     ROPEN_MAX is now assigned the value FOPEN_MAX from stdio.
  30.  
  31.     Reduced memory fragmentation from function rgetrec.
  32.  
  33. 03/19/96 - vers. 2.14
  34.  
  35.     Added right padding to rcputt(), rcputtm() and rcputs().
  36.  
  37. 09/04/95 - vers. 2.13
  38.  
  39.     Fixed bugs in rsetrecstr(), rcgett(), and rgett() functions.
  40.     Revised rfixt() function.
  41.  
  42.     Revised algorithm within sftotm() function in rgett.c file to do 
  43.     a better job of parsing incomplete time data.
  44.  
  45.     Added macro RECBEGYR and function rsetbegyr().  These control the 
  46.     interpretation of time data that is read by the %y format.  RECBEGYR 
  47.     defaults to 1951.  In other words, the %y input corresponds to the 
  48.     years from 1951 to 2050.  Note that time_t type variables may not 
  49.     be able to represent the complete range, but that you should not have 
  50.     this limitation if using struct tm type variables.  To represent a 
  51.     different range of years, you can change the beginning year of the 
  52.     range by using the rsetbegyr function.
  53.     
  54.     Examples: 1/1/51 -> Jan 1, 1951
  55.             12/31/99 -> Dec 31, 1999
  56.               1/1/00 -> Jan 1, 2000
  57.             12/31/50 -> Dec 31, 2050
  58.  
  59.     Changed EINVDAT to EDOM for ANSI-C compatibility.  
  60.     
  61.     Changed abort() to exit(EXIT_FAILURE) so that streams are flushed 
  62.     upon abnormal program termination.
  63.     
  64.     Improved portability by moving all compiler dependencies to recio.h.
  65.  
  66. 01/29/95 - vers. 2.12
  67.  
  68.     New improved field parsing engine derived from regular expression 
  69.     specification is discussed in section 2.4 of design.txt.  Primary 
  70.     changes are:
  71.     
  72.         * When the field delimiter is not whitespace and the text
  73.           delimiter is whitespace (or anytime the text delimiter 
  74.           is not used even if defined as non-whitespace), leading
  75.           and lagging whitespace are not trimmed from a string field.
  76.     
  77.         * When the text delimiter is not whitespace, the text 
  78.           delimiter can be included as part of a field provided it 
  79.           is not followed by the field termination sequence.  The 
  80.           field termination sequence consists of the text delimiter 
  81.           followed by optional whitespace followed by either the 
  82.           field delimiter or the end of the record.  To illustrate 
  83.           for comma delimited fields with quoted text, the following 
  84.           is only one field: "K&R wrote, "Hello, World"".
  85.     
  86.         * When the text delimiter is the double quote character,
  87.           quoted text within the field is treated as a single word.  
  88.           The comma-delimited example "Use case "1", okay?" parses 
  89.           to one field.
  90.           
  91.         * Fixed a bug in how the rnumfld function counts fields.  
  92.           When the field delimiter is whitespace, the rnumfld function 
  93.           would count any trailing whitespace in the last field as an 
  94.           extra empty field.  The rnumfld function no longer counts any 
  95.           empty fields when whitespace is used as the field separator 
  96.           because empty fields are undetectable in this situation.
  97.     
  98.     An expanded discussion of the ltoa and ultoa functions can now be 
  99.     found in section 3.6 of design.txt.  Included simple ltoa and ultoa 
  100.     code for compilers that don't have these functions.
  101.  
  102. 12/26/94 - vers. 2.11
  103.  
  104.     Fixed some typos in spec.txt.  Added section 3.6 to design.txt.  
  105.     Made some minor stylistic improvements to the source code.
  106.  
  107. 11/2/94 - vers. 2.10
  108.  
  109.     Added new time fields.  Can input and output times using either 
  110.     the time_t or struct tm types and in various user specified formats.  
  111.     New modules are rgett.c, rputt.c, rcgett.c, and rcputt.c.
  112.  
  113.     Time formats are specified using a subset of the specifiers 
  114.     from the ANSI-C strftime function.  Supported specifiers are:
  115.         %d - day of month (1-31)
  116.         %H - hour from 24-hour clock (0-23)
  117.         %m - month (1-12)
  118.         %M - minute (0-59)
  119.         %s - second (0-61)
  120.         %y - year without century (00-99)
  121.         %Y - year with century (e.g. 1994)
  122.  
  123.     The default time format is "%m/%d/%y".  Can override the format on 
  124.     any record stream with a new format using the rsettmfmt function.
  125.  
  126.     Added new warning macro constant R_WTMFMT.  R_WTMFMT indicates that 
  127.     the time data was incomplete (i.e. any element of time format not 
  128.     matched against data).  Also new macro constants R_WFAULT and R_EFAULT 
  129.     added for use by application specific functions.
  130.  
  131.     Data written to an output stream can now be written without field and 
  132.     text delimiters.  Just set the field and text delimiters to the null 
  133.     character.
  134.  
  135. 10/10/94 - vers 2.04
  136.  
  137.     Added new string functions scntrimbegs, scntrimends, and scntrims 
  138.     to rstr.c file.
  139.  
  140.     Fixed minor bug in _rfldstr function in rget.c file.
  141.  
  142.     Changed return type for rskipfld and rskipnfld to unsigned, and  
  143.     num parameter in rskipnfld to unsigned.  Functions now return 
  144.     zero on error.
  145.  
  146.     Added new functions rnumfld, rgetfldpos, and rsetfldpos to rget.c
  147.     file.
  148.  
  149. 10/02/94 - vers 2.03
  150.  
  151.   Eliminated error return values for most functions.  This promotes a 
  152.   programming style that makes use of the callback error function as the 
  153.   preferred way to handle errors.  For lint users, reduces the number of 
  154.   warnings.
  155.  
  156.   Added macro ristxtfld.  If ristxtfld macro returns non-zero, then the 
  157.   current field (the field most recently input or output) was quoted with 
  158.   the text character delimiter (if not white space).  If ristxtfld macro 
  159.   returns zero, then the current field was not quoted.
  160.  
  161.   Added macro rresetrec.  Use of the rresetrec macro allows you to read 
  162.   the fields from the record buffer multiple times.  For example, you 
  163.   could first use rskipnfld to determine the number of fields, then use 
  164.   rresetrec to reset back to the beginning of the record buffer, and 
  165.   finally read in each field until you have reached the number of fields.
  166.  
  167.   Added modules remsg.c and rwmsg.c containing simple callback functions 
  168.   rerrmsg and rwarnmsg for reporting errors and warnings respectively.  
  169.   You may wish to use these functions during the initial prototyping stage 
  170.   of software development.  In the later stages of development, you can 
  171.   substitute more robust error and warning message functions.  Also added 
  172.   the rinit function that registers the error and warning message functions.  
  173.   It just calls rseterrfn and rsetwarnfn, but may be easier to remember.
  174.  
  175.   Added module rstr.c.  This module contains a small set of string functions 
  176.   that are needed by rget.c.  You may also find them useful in your programs.
  177.   See section 7 of the ascii file USAGE.TXT for more details.
  178.  
  179. 05/02/94 - vers 2.02
  180.  
  181.   Handling of errno made more reliable and more portable.  Some Borland C 
  182.   conversion functions clear errno first, some do not.  Where errno is 
  183.   checked after a conversion, cleared errno before conversion.
  184.  
  185.   Reduced code size of numeric field function modules by one-third by 
  186.   eliminating the macro emulation of function templates.  Number of header 
  187.   files reduced from nine to one.
  188.  
  189. 04/22/94 - vers 2.01
  190.  
  191.   Added rsetrecstr function to rget.c.  Sometimes it is handy to stuff a 
  192.   record buffer with your own string, then let the field input functions 
  193.   scan it.  
  194.   
  195.   Added mode check to several rget.c functions to ensure an error will be 
  196.   generated if these input functions are mistakenly used in an output stream.
  197.  
  198.   Fixed bugs in rwarn.c.  Warnings were not being cleared or reset correctly.
  199.  
  200. 04/15/94 - vers 2.00
  201.  
  202.   RECIO can now write as well as read.  Over 25 new functions added.
  203.  
  204.   New record streams that are always open are recout, recerr, and recprn.
  205.   New predefined context numbers are RECOUT, RECERR, and RECPRN.
  206.  
  207.   ROPEN_MAX increased from 5 to 8.
  208.  
  209.   New symbolic error constants are: 
  210.     R_EINVMOD - tried to read file opened in write mode, or vice versa.
  211.     R_ENOPUT  - unable to output data.
  212.  
  213.   New callback warning function and associated warning functions.
  214.   Now all empty data strings are trapped as warnings.  Application can
  215.   choose to handle them or to ignore them.  Failure of atexit function 
  216.   is changed from an error to a warning.
  217.  
  218.   New symbolic warning constants:
  219.     R_WEMPSTR - data string is empty.
  220.     R_WWIDTH  - data too wide for columnar output.
  221.     R_WNOREG  - unable to register exit function with atexit().
  222.                 (changed from error symbolic constant R_ENOREG).
  223.  
  224. 04/8/94 - vers 1.20
  225.  
  226.   Created new rerrstr and rstrerror functions.  Simplified TESTCH.C and 
  227.   TESTCO.C code by using rerrstr.
  228.  
  229.   Changed the specification and code for the rgets and rcgets functions to 
  230.   return a pointer to an empty string (rather than a null pointer) on error.  
  231.   This will help reduce null pointer errors in application programs. 
  232.  
  233.   Changed the specification and code for the rgetrec function.  The rgetrec 
  234.   function now clears the record buffer before the next record is read.  
  235.   This will cause the error number to be set to R_EMISDAT if the application 
  236.   ignores the eof indicator and attempts to read fields in records beyond 
  237.   end-of-file.  There is one exception: if the field just prior to the record 
  238.   buffer string terminator is a string field (which for an empty record buffer 
  239.   is the first field), it won't be trapped as missing data.  This is an 
  240.   unavoidable consequence of allowing empty string fields.  But you shouldn't 
  241.   be ignoring end-of-file anyway!  Also rgetrec continues to increment the 
  242.   record number if the program reads beyond end of file.  This solves an 
  243.   "off by one" bug when the file ends prematurely.
  244.  
  245.   Developed the dif program to locate line where two text files first 
  246.   differ.  Inserted dif source into TUTOR.TXT to illustrate a very simple
  247.   callback error function.  Substituted the dif program for the cmp program 
  248.   in regression test TEST.BAT.
  249.  
  250.  
  251. 04/5/94 - vers 1.11
  252.  
  253.   When is the minimum not the minimum?  MIN values in <float.h> are defined 
  254.   differently than in <limits.h>.  Fixed code to match definitions in 
  255.   ANSI X3.159-1989 Section 2.2.4.2.
  256.   
  257.   RECIO now tests for underflow and overflow of all floating point numbers 
  258.   input.  Test results TESTCH.OUT shows when overflow and underflow occur.
  259.   
  260.   Created new rfix functions to provide a quick way to fix overflows and 
  261.   underflows, and to get callback error functions up and running more 
  262.   quickly.
  263.  
  264.  
  265. 03/28/94 - vers 1.10
  266.  
  267.   Created single precision floating point functions rgetf() and rcgetf().
  268.  
  269.   Created functions rsetbegcolno() and rbegcolno() to make it easy to 
  270.   have column numbering start at either 0 or 1.  Default is 0.
  271.  
  272.   Created program TESTCO to test column delimited fields; enhanced test 
  273.   program TESTCH for character delimited fields.
  274.   
  275.   Created new symbolic error constants for record streams.  Program must 
  276.   use symbolic constants starting with R_ (such as R_EINVDAT) for valid 
  277.   record streams; use errno constants (such as ENOMEM) for invalid record 
  278.   streams.  New error checking provides better reporting and portability.
  279.   New symbolic error constants are not compatible with version 1.00; 
  280.   some rework of version 1.00 callback error functions required.
  281.  
  282.   Fixed some bugs in the column delimited functions.
  283.  
  284. 03/23/94 - vers 1.00
  285.  
  286.   Initial public release.
  287.